﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeHeng_Mes.Utils
{
    public class CsvReaderHelper
    {
        public static Dictionary<string, string[]> ReadCsv(string filePath, string alignHeader)
        {
            // 创建一个字典，存储列标题和列数据
            var csvData = new Dictionary<string, List<string>>();

            // 打开 CSV 文件并读取
            using (var reader = new StreamReader(filePath, Encoding.Default))
            {
                // 读取并处理列标题（第一行）
                string headerLine = reader.ReadLine();
                if (string.IsNullOrEmpty(headerLine))
                    throw new InvalidOperationException("CSV文件为空或没有列标题");

                var headers = headerLine.Split(',');

                // 初始化字典，将列标题作为键，每个键对应一个空的 List<string> 用于存储数据
                foreach (var header in headers)
                {
                    csvData[header] = new List<string>();
                }

                // 逐行读取 CSV 数据
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    var values = line.Split(',');

                    // 处理每行数据，确保每列都至少有与 alignHeader 对应的列一致的数量
                    for (int i = 0; i < headers.Length; i++)
                    {
                        string value = i < values.Length ? values[i] : null;

                        // 如果当前列的标题是 alignHeader，确保每一行都至少有与此列对齐的数量
                        if (csvData.ContainsKey(headers[i]))
                        {
                            // 如果值为空并且当前列不等于 alignHeader，补充 null
                            if (string.IsNullOrEmpty(value))
                            {
                                value = "null";  // 可以选择填充空字符串或者 null，这取决于需求
                            }
                            csvData[headers[i]].Add(value);
                        }
                    }
                }
            }

            // 将字典中的每个 List<string> 转换成 string[] 数组
            var result = new Dictionary<string, string[]>();

            // 确保每列的长度一致
            int maxRows = csvData[alignHeader].Count;  // 获取 alignHeader 列的行数

            foreach (var kvp in csvData)
            {
                // 对每列进行填充，确保长度一致
                var columnValues = kvp.Value;
                while (columnValues.Count < maxRows)
                {
                    columnValues.Add("null"); // 如果当前列行数小于最大行数，填充 null
                }

                result[kvp.Key] = columnValues.ToArray();
            }

            return result;
        }

    }
}
